/*******************************************************************************
 *   Filename:       bsp.c
 *   Revised:        All copyrights reserved to Roger-WY.
 *   Revision:       v1.0
 *   Writer:	     Roger-WY.
 *
 *   Description:    板级支持包
 *
 *   Notes:
 *     				E-mail:261313062@qq.com
 *
 *******************************************************************************/

#include "bsp.h"

/*******************************************************************************
 * 名    称： Bsp_Init
 * 功    能： 初始化所有的硬件设备。该函数配置CPU寄存器和外设的寄存器并初始化一些全局变量。只需要调用一次
 * 入口参数： 无
 * 出口参数： 无
 * 作　　者： Roger-WY.
 * 创建日期： 2015-06-25
 * 修    改：
 * 修改日期：
 * 备    注：
 *******************************************************************************/
void bsp_Init(void)
{
	/* 设置NVIC优先级分组为Group2：0-3抢占式优先级，0-3的响应式优先级 */
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
	/*
    由于ST固件库的启动文件已经执行了CPU系统时钟的初始化，所以不必再次重复配置系统时钟。
    启动文件配置了CPU主时钟频率、内部Flash访问速度和可选的外部SRAM FSMC初始化。
	*/

    bsp_LedInit();   /* 初始化用户自定义LED */
    bsp_UartInit();  /* 配置串口，用于通信 */
    /***********************************************
    * 描述： 配置按键GPIO, 必须在bsp_InitTimer之前调用
    */
    //bsp_InitKey();

    /***********************************************
    * 描述： I2C总线 及 所有I2C接口的器件 初始化
    */
    //Bsp_InitI2C();   /* 初始化I2C总线，使用模拟I2C */
    //ee_CheckOk();    /* 检测并初始化EEPROM */


    /***********************************************
    * 描述： SPI总线 及 所有SPI接口的器件 初始化
    */
    //Bsp_InitSPIBus(); /* 初始化SPI总线，函数中可以通过宏定义切换使用硬件SPI还是模拟SPI */
    //Bsp_SFlashInit(); /* 初始化外部Flash */


    /***********************************************
    * 描述： 初始化systick定时器，并启动定时中断  (此函数会开中断)
    *        一般在初始化所有外设之后初始化定时器时钟
    */
	bsp_TimerInit();

    //Bsp_RealTimeInit();   /*实时时间初始化,使用外部RTC芯片时需要放在定时器后面初始化，因为该初始化中调用了软定时器的延时函数*/
    /********************************************************************
    * 描述： 校准RTC时间，仅需调用一次即可
    */
//    struct tm ChangeTime;
//    ChangeTime.tm_year = 2016;
//    ChangeTime.tm_mon  = 9;
//    ChangeTime.tm_mday = 19;
//    ChangeTime.tm_hour = 21;
//    ChangeTime.tm_min  = 57;
//    ChangeTime.tm_sec  = 0;
//    TIME_SetCalendarTime(ChangeTime);

    /***********************************************
    * 描述： 初始化内部独立看门狗
    */
    //bsp_IwdgInit(BSP_WDT_MODE_INT);
}


/*******************************************************************************
 * 名    称： bsp_RunPer1ms
 * 功    能： 该函数每隔1ms被Systick中断调用1次。详见 bsp_timer.c的定时中断服务程序。
              一些需要周期性处理的 事务可以放在此函数。比如：触摸坐标扫描。
 * 入口参数： 无
 * 出口参数： 无
 * 作　　者： Roger-WY.
 * 创建日期： 2015-06-25
 * 修    改：
 * 修改日期：
 * 备    注：
 *******************************************************************************/
void bsp_RunPer1ms(void)
{

}

/*******************************************************************************
 * 名    称： bsp_RunPer10ms
 * 功    能： 该函数每隔10ms被Systick中断调用1次。详见 bsp_timer.c的定时中断服务程序。一些需要周期性处理
 *			  的事务可以放在此函数。比如：按键扫描、蜂鸣器鸣叫控制等。
 * 入口参数： 无
 * 出口参数： 无
 * 作　　者： Roger-WY.
 * 创建日期： 2015-06-25
 * 修    改：
 * 修改日期：
 * 备    注：
 *******************************************************************************/
void bsp_RunPer10ms(void)
{
     /*
     下面的代码实现所有按键的检测。按键检测每隔10ms一次就行了，一般做40ms的滤波处理就可以
     有效过滤掉机械动作造成的按键抖动。
     */
     //bsp_KeyScan();		/* 按键扫描 */
     //bsp_BeepPro();       /* 蜂鸣器轮询函数，该函数在 bsp_beep.c 中实现 */
}

/*******************************************************************************
 * 名    称： bsp_Idle
 * 功    能： 空闲时执行的函数。
 * 入口参数： 无
 * 出口参数： 无
 * 作　　者： Roger-WY.
 * 创建日期： 2015-06-25
 * 修    改：
 * 修改日期：
 * 备    注： 本函数缺省为空操作。用户可以添加喂狗、设置CPU进入休眠模式的功能。
 *******************************************************************************/
void bsp_Idle(void)
{
	/* --- 喂狗 */
    bsp_IwdgFeed();
	/* --- 让CPU进入休眠，由Systick定时中断唤醒或者其他中断唤醒 */

	/* 对于 emWin 图形库，可以插入图形库需要的轮询函数 */
	//GUI_Exec();

	/* 对于 uIP 协议实现，可以插入uip轮询函数 */

#if ( MODBUS_CFG_SLAVE_EN == 1 )
    MODS_Poll();    /* Modbus从站消息处理函数 */
#endif
#if ( MODBUS_CFG_HOST_EN == 1 )
    MODH_Poll();    /* Modbus主站消息处理函数 */
#endif
}

/*****************************  (END OF FILE) *********************************/
